package com.ruixun.shopmanagement.util.impl;



import java.util.Properties;
import java.util.concurrent.Callable;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;



import com.sun.mail.util.MailSSLSocketFactory;


/**
 * 
 * @author Administrator 本类是为了发送6位验证码到指定邮箱的继承callable的类,可以通过futuretask对象拿到验证码
 */
public class MailRobot implements Callable<Boolean> {

	private String senderEmail;// 发件人邮箱
	private String code;// 激活码
	private String receiverEmail; // 收件人邮箱
	private String subject;
	private String content; // 发送内容
	

	public MailRobot(String senderEmail, String code, String receiverEmail, String content,String subject) {
		super();
		this.senderEmail = senderEmail;
		this.code = code;
		this.receiverEmail = receiverEmail;
		this.content = content;
		this.subject=subject;
	}

	@Override
	public Boolean call() throws Exception {
		// 记录有无异常
		Boolean result = true;
		// 1.创建连接对象javax.mail.Session
		// 2.创建邮件对象 javax.mail.Message
		// 3.发送一封激活邮件
		String host = "smtp.qq.com"; // 指定发送邮件的主机smtp.qq.com(QQ)|smtp.163.com(网易)
		Properties properties = System.getProperties();// 获取系统属性
		properties.setProperty("mail.smtp.host", host);// 设置邮件服务器
		properties.setProperty("mail.smtp.auth", "true");// 打开认证
		try {
			// QQ邮箱需要下面这段代码，163邮箱不需要
			MailSSLSocketFactory sf = new MailSSLSocketFactory();
			sf.setTrustAllHosts(true);
			properties.put("mail.smtp.ssl.enable", "true");
			properties.put("mail.smtp.ssl.socketFactory", sf);
			// 1.获取默认session对象
			Session session = Session.getDefaultInstance(properties, new Authenticator() {
				public PasswordAuthentication getPasswordAuthentication() {
					return new PasswordAuthentication(senderEmail, code); // 发件人邮箱账号、授权码
				}
			});

			// 2.创建邮件对象
			Message message = new MimeMessage(session);
			// 2.1设置发件人
			message.setFrom(new InternetAddress(senderEmail));
			// 2.2设置接收人
			message.addRecipient(Message.RecipientType.TO, new InternetAddress(receiverEmail));
			// 2.3设置邮件主题
			message.setSubject(subject);
			// 2.4设置邮件内容
			// 2.41将验证码加入内容
			
			message.setContent(content, "text/html;charset=UTF-8");
			// 3.发送邮件
			Transport.send(message);
			System.out.println(receiverEmail + "邮件成功发送!");
		} catch (Exception e) {
			result = false;
			e.printStackTrace();
		}
		return result;

	}

}
